home *** CD-ROM | disk | FTP | other *** search
- static char weekday_prog[] = "@(#) int weekday(int tag,int monat,int jahr)";
- static char weekday_s_prog[] = "@(#) int weekday_s(char *datestring)";
- static char weekday_ver[] = "@(#) v1.00/kr ; 17.05.91";
- /* weekday Funktionen zum Ermitteln eines beliebigen Wochentages
- **
- ** Deklaration int weekday(int tag, int monat, int jahr);
- ** int weekday_s(char *datestring);
- **
- ** Rückgabe Wochentagsnummer( Montag=1,..) oder 0 im Fehlerfall
- **
- ** Autor Klaus Rath ( weekday beruht auf einer Beispielfunktion aus
- ** dem Nixdorf-Handbuch "Die Sprache C" )
- **
- ** Anmerkungen weekday überprüft nur, ob Tag oder Monat den innerhalb eines
- ** Intervalls 1..31 bzw. 1..12 liegen, sowie ob das Jahr >= 0
- ** ist. Falls diese Bedingungen nicht erfüllt sind, wird 0
- ** zurückgegeben. Eine eingehendere Prüfung wird hier nicht
- ** durchgeführt !!!
- ** weekday_s verarbeitet nur vollständige Datümer, d.h. es wer-
- ** nur die langen Formate tt.mm.jjjj, mm/tt/jjjj und jjjjmmtt
- ** akzeptiert. Dies wird überprüft und im Fehlerfall 0 zurück-
- ** gegeben. Anschließend wird mit erzeugten int-Werten weekday
- ** aufgerufen.
- ** Die Übergabe von korrekten Datümern an weekday_s kann mit
- ** der Funktion checkdate() überprüft werden !
- */
-
- int weekday(int tag,int monat,int jahr)
- {
- int jahrfak,ergebnis;
-
- jahrfak = ergebnis = 0;
-
- if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
- return(0);
-
- jahrfak = jahr + ( monat-14)/12;
-
- ergebnis = ( ( ( 13 * (monat + 10 - (monat + 10)/13 * 12) - 1 ) / 5
- + tag + 77 + 5*(jahrfak % 100)/4
- + jahrfak/400 - jahrfak/100*2 ) % 7 + 1 );
-
- switch ( ergebnis ) {
- case 1: ergebnis = 7;
- break;
- case 2: ergebnis = 1;
- break;
- case 3: ergebnis = 2;
- break;
- case 4: ergebnis = 3;
- break;
- case 5: ergebnis = 4;
- break;
- case 6: ergebnis = 5;
- break;
- case 7: ergebnis = 6;
- break;
- default:ergebnis = 0;
- } /* ENDE: switch */
-
- return(ergebnis);
- }
-
- #include <stdlib.h>
-
- int weekday_s(char *datestring)
- {
- int ergebnis,jahr,monat,tag;
- char jahr_s[5];
- char monat_s[3];
- char tag_s[3];
- int laenge;
-
- ergebnis = jahr = monat = tag = laenge = 0;
-
- laenge = strlen(datestring);
-
- if ( !( laenge == 10 || laenge == 8 ) )
- return(0);
-
- if ( datestring[2] == '.' && laenge == 10 ) {
- tag_s[0] = datestring[0];
- tag_s[1] = datestring[1];
- tag_s[2] = '\0';
- monat_s[0] = datestring[3];
- monat_s[1] = datestring[4];
- monat_s[2] = '\0';
- jahr_s[0] = datestring[6];
- jahr_s[1] = datestring[7];
- jahr_s[2] = datestring[8];
- jahr_s[3] = datestring[9];
- jahr_s[4] = '\0';
- }
- else if ( datestring[2] == '/' && laenge == 10 ) {
- tag_s[0] = datestring[3];
- tag_s[1] = datestring[4];
- tag_s[2] = '\0';
- monat_s[0] = datestring[0];
- monat_s[1] = datestring[1];
- monat_s[2] = '\0';
- jahr_s[0] = datestring[6];
- jahr_s[1] = datestring[7];
- jahr_s[2] = datestring[8];
- jahr_s[3] = datestring[9];
- jahr_s[4] = '\0';
- }
- else if ( laenge == 8 ) {
- tag_s[0] = datestring[6];
- tag_s[1] = datestring[7];
- tag_s[2] = '\0';
- monat_s[0] = datestring[4];
- monat_s[1] = datestring[5];
- monat_s[2] = '\0';
- jahr_s[0] = datestring[0];
- jahr_s[1] = datestring[1];
- jahr_s[2] = datestring[2];
- jahr_s[3] = datestring[3];
- jahr_s[4] = '\0';
- }
- else
- return(0);
-
- tag = atoi(tag_s);
- monat = atoi(monat_s);
- jahr = atoi(jahr_s);
-
- if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
- return(0);
-
- ergebnis = weekday(tag,monat,jahr);
-
- return(ergebnis);
- }
-